home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / cpp_libs / answrbok / 8_5.lha / 8_5 / freopen.c < prev    next >
Text File  |  1993-08-08  |  782b  |  37 lines

  1. * Copyright (c) 1990 by AT&T Bell Telephone Laboratories, Incorporated. */
  2. * The C++ Answer Book */
  3. * Tony Hansen */
  4. * All rights reserved. */
  5. / Open a named file on a stdio
  6. / stream which is already active.
  7. ILE *freopen(const char *file,
  8.    const char *fmode, FILE *f)
  9.  
  10.    open_mode svmode = f->mode;
  11.  
  12.    // set the modes up
  13.    open_mode m = (*fmode == 'w') ? output :
  14.       (*fmode == 'a') ? append :
  15.                 input;
  16.  
  17.    // close the old stream
  18.    if (svmode == input) delete f->in;
  19.    else delete f->out;
  20.    delete f->sb;
  21.  
  22.    // open the file
  23.    delete f->sb;
  24.    filebuf *nsb = new filebuf;
  25.    nsb->open((char*)file, m);
  26.    f->sb = nsb;
  27.  
  28.    // create the appropriate new stream
  29.    if (f->mode == input)
  30. f->in = new istream(f->sb);
  31.  
  32.    else
  33. f->out = new ostream(f->sb);
  34.  
  35.    return f;
  36.  
  37.